package 简单.双指针;

import java.util.ArrayDeque;
import java.util.Deque;

/**
 * 给你一个混合了数字和字母的字符串 s，其中的字母均为小写英文字母。
 * 请你将该字符串重新格式化，使得任意两个相邻字符的类型都不同。也就
 * 是说，字母后面应该跟着数字，而数字后面应该跟着字母。
 * 请你返回 重新格式化后 的字符串；如果无法按要求重新格式化，则返回一个 空字符串 。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/reformat-the-string
 */
public class 重新格式化字符串_1417 {

    public static void main(String[] args) {

    }

    public String reformat(String s) {
        Deque<Character> queue1 = new ArrayDeque<>();
        Deque<Character> queue2 = new ArrayDeque<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (Character.isDigit(c)) {
                queue1.addFirst(c);
            } else {
                queue2.addFirst(c);
            }
        }
        if (Math.abs(queue1.size() - queue2.size()) >= 2) {
            return "";
        }
        StringBuilder stringBuilder = new StringBuilder();
        boolean flag = queue1.size() > queue2.size();

        while (!queue1.isEmpty() || !queue2.isEmpty()) {
            if (flag) {
                if (!queue1.isEmpty()) {
                    stringBuilder.append(queue1.pollFirst());
                }
                if (!queue2.isEmpty()) {
                    stringBuilder.append(queue2.pollFirst());
                }
            } else {
                if (!queue2.isEmpty()) {
                    stringBuilder.append(queue2.pollFirst());
                }
                if (!queue1.isEmpty()) {
                    stringBuilder.append(queue1.pollFirst());
                }
            }
        }

        return stringBuilder.toString();
    }

    // TODO 双指针

}
